
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>HashMap的特性？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>HashMap的特性？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">HashMap 对于 `null` 键和 `null` 值有什么规定？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">HashMap 允许一个键为 `null`，并且可以有多个 `null` 值。在 HashMap 中，`null` 键通常会被存储在第一个桶中（即索引为 0 的位置）。</div>
          </div>
          <div class="card-source">来源: 3. 允许 null 键和值</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">当尝试向 HashMap 中插入一个已经存在的键时，会发生什么情况？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">如果试图插入一个已经存在的键，HashMap 不会添加新的键值对，而是会替换掉这个键原有的值。</div>
          </div>
          <div class="card-source">来源: 2. 键的唯一性</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">HashMap 是线程安全的吗？如果不是，在多线程环境中应如何处理？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">HashMap 是非线程安全的。如果需要在多线程环境中使用，建议使用 `Collections.synchronizedMap` 方法来获得线程安全的版本，或者直接使用 `ConcurrentHashMap` 替代。</div>
          </div>
          <div class="card-source">来源: 8. 线程不安全</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">HashMap 在什么条件下会触发动态扩容（resizing）？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当 HashMap 中的键值对数量超过了负载因子（默认 0.75）与当前容量的乘积时，它会将容量扩大一倍，并将所有键值对重新哈希到新的桶中。</div>
          </div>
          <div class="card-source">来源: 7. 动态扩容</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">什么是哈希冲突？从 JDK 8 开始，HashMap 是如何优化哈希冲突处理的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">哈希冲突是指不同的键可能会映射到同一个桶中的情况。从 JDK 8 开始，当链表长度超过一定阈值（默认为 8）时，链表会转换为红黑树，以提高性能。</div>
          </div>
          <div class="card-source">来源: 6. 哈希冲突</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">HashMap 迭代器的“快速失败”（fail-fast）机制指的是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">“快速失败”机制意味着如果在迭代过程中，HashMap 的结构被修改（除了通过迭代器自身的 remove 方法），迭代器会立即抛出 `ConcurrentModificationException` 异常，以防止并发修改时出现不一致的结果。</div>
          </div>
          <div class="card-source">来源: 11. 迭代器的快速失败机制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">HashMap 中的元素存储顺序和它们的插入顺序有关系吗？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">没有关系。HashMap 中的键值对是无序存储的，遍历时的顺序可能与插入时的顺序不同，并且可能会随着扩容等操作发生改变。</div>
          </div>
          <div class="card-source">来源: 4. 无序存储</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">HashMap 基于什么数据结构实现？这带来了什么性能优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">HashMap 基于哈希表实现。这种结构通过计算键的哈希值将其映射到内部数组的某个位置，从而能够提供快速的插入、删除和查找操作，平均时间复杂度为 O(1)。</div>
          </div>
          <div class="card-source">来源: 5. 哈希表实现</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">HashMap 在最坏情况下的性能表现是怎样的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在最坏情况下，如果所有键都映射到了同一个桶中，HashMap 的查找、插入和删除操作性能会从 O(1) 退化到 O(n)。</div>
          </div>
          <div class="card-source">来源: 10. 高效的查找和更新</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
